package com.beiben.work.process.service;

import com.beiben.system.file.domain.File;
import com.beiben.work.process.domain.FileProcessUser;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 任务分配Service接口
 *
 * @author xgq
 * @date 2020-08-26
 */
public interface IFileProcessUserService {
    /**
     * 查询任务分配
     *
     * @param itemId 任务分配ID
     * @return 任务分配
     */
    public FileProcessUser selectFileProcessUserById(Long itemId);

    /**
     * 查询任务分配列表
     *
     * @param fileProcessUser 任务分配
     * @return 任务分配集合
     */
    public List<FileProcessUser> selectFileProcessUserList(FileProcessUser fileProcessUser) throws ParseException;

    /**
     * 新增任务分配
     *
     * @param fileProcessUser 任务分配
     * @return 结果
     */
    public int insertFileProcessUser(FileProcessUser fileProcessUser);

    /**
     * 修改任务分配
     *
     * @param fileProcessUser 任务分配
     * @return 结果
     */
    public int updateFileProcessUser(FileProcessUser fileProcessUser);

    /**
     * 修改任务分配
     *
     * @param fileProcessUser 任务分配
     * @return 结果
     */
    public int updateFileProcessUserByWorkId(FileProcessUser fileProcessUser);

    /**
     * 批量删除任务分配
     *
     * @param itemIds 需要删除的任务分配ID
     * @return 结果
     */
    public int deleteFileProcessUserByIds(Long[] itemIds);

    /**
     * 删除任务分配信息
     *
     * @param itemId 任务分配ID
     * @return 结果
     */
    public int deleteFileProcessUserById(Long itemId);


    /**
     * 批量审批（完成）任务分配
     *
     * @param itemIds        分任务id数组
     * @param realFinishTime 真实完成时间
     * @return
     */
    public int finishedFileProcessUserByIds(Long[] itemIds, Date realFinishTime, Long workId);

    public int changeStatesByIds(Long[] itemIds, String state);

    /**
     * 按itemId获取文件列表
     *
     * @param itemId
     * @return
     */
    public List<File> selectFiles(Long itemId);

    /**
     * 批量删除任务分配
     *
     * @param workIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteFileProcessByWorkIds(Long[] workIds);

    /**
     * 批量删除任务分配
     *
     * @param workId 需要删除的数据ID
     * @return 结果
     */
    public int deleteFileProcessByWorkId(Long workId);

    /**
     * 根据itemid查询所属组别
     *
     * @param itemId 数据ID
     * @return 结果
     */
    List<String> selectFileProcessGroupByItemId(Long itemId);

    /**
     * 按itemId获取文件列表及相关文件列表
     *
     * @param itemId
     * @return
     */
    Map<String, List<File>> selectAllFiles(Long itemId);

    /**
     * 验证是否上传附件
     *
     * @param itemIds
     */
    public void verifyAttachment(Long[] itemIds);

    /**
     * 根据workId获取相应工作信息
     *
     * @param fileProcessUser
     * @return
     */
    public List<FileProcessUser> selectFileProcessUserPeerByWorkId(FileProcessUser fileProcessUser);

}
